package com.smile.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smile.commons.page.MyBatisPlusPageConverter;
import com.smile.mapper.GiveAnAlarmMapper;
import com.smile.model.domain.FeisuanGiveAnAlarm;
import com.smile.model.dto.request.GetGiveAnAlarmByIdRequestDTO;
import com.smile.model.dto.request.GetGiveAnAlarmListRequestDTO;
import com.smile.model.response.response.GetGiveAnAlarmByIdResponseDTO;
import com.smile.model.response.response.GetGiveAnAlarmListResponseDTO;
import com.smile.service.GiveAnAlarmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class GiveAnAlarmServiceImpl implements GiveAnAlarmService {
    @Autowired
    private GiveAnAlarmMapper giveAnAlarmMapper;

    @Override
    public Page<GetGiveAnAlarmListResponseDTO> getGiveAnAlarmList(GetGiveAnAlarmListRequestDTO getGiveAnAlarmListRequestDTO) {
        QueryWrapper<FeisuanGiveAnAlarm> queryWrapper = new QueryWrapper<>();
        queryWrapper.between(
                ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO) && ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO.getStartTime())
                        && ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO.getEndTime())
                , "create_time", getGiveAnAlarmListRequestDTO.getStartTime(), getGiveAnAlarmListRequestDTO.getEndTime());

        queryWrapper.eq(ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO) &&
                ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO.getEventType()), "event_type", getGiveAnAlarmListRequestDTO.getEventType());


        queryWrapper.eq(ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO) && ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO.getSource())
                , "source", getGiveAnAlarmListRequestDTO.getSource());

        queryWrapper.eq(ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO) && ObjectUtil.isNotNull(getGiveAnAlarmListRequestDTO.getState()), "state", getGiveAnAlarmListRequestDTO.getState());


        Page<FeisuanGiveAnAlarm> page = giveAnAlarmMapper.selectPage(new Page<>(getGiveAnAlarmListRequestDTO.getCurrentPage(), getGiveAnAlarmListRequestDTO.getPageSize()), queryWrapper);
        List<GetGiveAnAlarmListResponseDTO> collect = page.getRecords().stream().map(i -> {
            GetGiveAnAlarmListResponseDTO getGiveAnAlarmListResponseDTO = BeanUtil.copyProperties(i, GetGiveAnAlarmListResponseDTO.class);
            switch (i.getEventType()) {
                case 0:
                    getGiveAnAlarmListResponseDTO.setEventType("人群聚集");
                    break;
                case 1:
                    getGiveAnAlarmListResponseDTO.setEventType("车辆事故");
                    break;
                case 2:
                    getGiveAnAlarmListResponseDTO.setEventType("重点车辆");
                    break;
                case 3:
                    getGiveAnAlarmListResponseDTO.setEventType("重点人员");
                    break;
                case 4:
                    getGiveAnAlarmListResponseDTO.setEventType("寻衅滋事");
            }
            getGiveAnAlarmListResponseDTO.setOrganizationName("测试组织");

            switch (i.getSource()) {
                case 0:
                    getGiveAnAlarmListResponseDTO.setSource("ai识别");
                    getGiveAnAlarmListResponseDTO.setReportPersonOrDevice("大里警务站机场");
                    break;
                case 1:
                    getGiveAnAlarmListResponseDTO.setSource("人工上报");
                    getGiveAnAlarmListResponseDTO.setReportPersonOrDevice("宁海博");
            }

            switch (i.getState()) {
                case 0:
                    getGiveAnAlarmListResponseDTO.setState("未处理");
                    break;
                case 1:
                    getGiveAnAlarmListResponseDTO.setState("已处理");
            }


            return getGiveAnAlarmListResponseDTO;
        }).collect(Collectors.toList());
        Page<GetGiveAnAlarmListResponseDTO> getGiveAnAlarmListResponseDTOPage = MyBatisPlusPageConverter.convertPage(page, GetGiveAnAlarmListResponseDTO.class);
        getGiveAnAlarmListResponseDTOPage.setRecords(collect);
        return getGiveAnAlarmListResponseDTOPage;
    }

    @Override
    public GetGiveAnAlarmByIdResponseDTO getGiveAnAlarmById(GetGiveAnAlarmByIdRequestDTO getGiveAnAlarmByIdRequestDTO) {
        FeisuanGiveAnAlarm feisuanGiveAnAlarm = giveAnAlarmMapper.selectById(getGiveAnAlarmByIdRequestDTO.getId());
        GetGiveAnAlarmByIdResponseDTO getGiveAnAlarmByIdResponseDTO = BeanUtil.copyProperties(feisuanGiveAnAlarm, GetGiveAnAlarmByIdResponseDTO.class);

        switch (feisuanGiveAnAlarm.getEventType()) {
            case 0:
                getGiveAnAlarmByIdResponseDTO.setEventType("人群聚集");
                break;
            case 1:
                getGiveAnAlarmByIdResponseDTO.setEventType("车辆事故");
                break;
            case 2:
                getGiveAnAlarmByIdResponseDTO.setEventType("重点车辆");
                break;
            case 3:
                getGiveAnAlarmByIdResponseDTO.setEventType("重点人员");
                break;
            case 4:
                getGiveAnAlarmByIdResponseDTO.setEventType("寻衅滋事");
        }
        getGiveAnAlarmByIdResponseDTO.setOrganizationName("测试组织");

        switch (feisuanGiveAnAlarm.getSource()) {
            case 0:
                getGiveAnAlarmByIdResponseDTO.setSource("ai识别");
                getGiveAnAlarmByIdResponseDTO.setReportPersonOrDevice("大里警务站机场");
                break;
            case 1:
                getGiveAnAlarmByIdResponseDTO.setSource("人工上报");
                getGiveAnAlarmByIdResponseDTO.setReportPersonOrDevice("宁海博");
        }


        return getGiveAnAlarmByIdResponseDTO;
    }
}
